<?php
/**
 * Joy Web Framework
 *
 * Copyright (c) 2008-2009 Netology Foundation (http://www.netology.org)
 * All rights reserved.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * This software consists of voluntary contributions made by many individuals
 * and is licensed under the LGPL.
 */

/**
 * @package     Joy
 * @subpackage  Application
 * @author      Hasan Ozgan <meddah@netology.org>
 * @copyright   2008-2009 Netology Foundation (http://www.netology.org)
 * @license     http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License
 * @version     $Id: Web.php 118 2010-01-24 15:46:25Z hasanozgan $
 * @link        http://joy.netology.org
 * @since       0.5
 */
class Joy_Application_Web extends Joy_Application
{
    public function onRunning()
    {
        $item = $this->router->match($_SERVER["REQUEST_URI"]);

        if ($item instanceof Joy_Router_Match) {
            // Instance Context
            $context = Joy_Context::getInstance();
            $context->request->setAction($item->getController(), $item->getAction(), $item->getArguments());
            $context->request->setParameters($item->getParameters());
            $context->request->setMethod($item->getMethod());

            // Render Factory
            $render = $item->getRender();

            // Set Theme To Render
            $theme = $item->getTheme();
            $render->setTheme($theme);

            // Injection Render In The Response Object
            $context->response->setRender($render);

            // Page Factory
            $page = Joy_Page::factory($item->getPage());

            // Page is building
            $page->build();
        }
        else {
            throw new Joy_Exception_NotFound_Class("Joy_Router_Match class not found");
        }
    }
}
